oblouk ze tri bodu
Otázka od: Petr Fiser
3. 8. 2004 14:55
Dobry den.
Nema nekdo napsany kus kodu pro vypocet parametru oblouku ze tri zadanych bodu
v rovine v kartezkych souradnicich.
Potrebuji zjistit Radius[r] a Stred[x, y].
Radius jsem vypocital, ale pri pocitani stredoveho bodu obcas dochazi k chybe.
Zrejmne nemam nejstatnejsi reseni vypoctu rovnic kruznice.
Dekuji.
Petr Fiser
Odpovedá: Slavomir Skopalik
3. 8. 2004 15:07
Hledej konstrukci opsane kruznice troujuhelniku.
Slavek
> Nema nekdo napsany kus kodu pro vypocet parametru oblouku ze
> tri zadanych bodu v rovine v kartezkych souradnicich.
> Potrebuji zjistit Radius[r] a Stred[x, y]. Radius jsem
> vypocital, ale pri pocitani stredoveho bodu obcas dochazi k
> chybe. Zrejmne nemam nejstatnejsi reseni vypoctu rovnic kruznice.
>
> Dekuji.
> Petr Fiser
Odpovedá: Petr Brant
3. 8. 2004 16:58
Na soukromy mail posilam reseni. Vzhledem k tomu, ze by se to mohlo hodit,
cast toho reseni (samotne vypocty) davam k dispozici sem.
RNDr. Petr Brant [brant@dcomm.cz]
http://brant.wz.cz <http://brant.wz.cz>
D&COMM s.r.o.
Korunovacni 6
Praha 7
tel. +420724007234
unit Unit2;
interface
procedure reseni_rovnice(a11,a12,a13,a21,a22,a23:extended; var x,
y:extended; var chyba:integer);
procedure prunik_primek(x1, y1, x2, y2, x3, y3, x4, y4:extended; var
x,y:extended; var na_prvni, na_druhe:boolean; var chyba:integer);
procedure stred_dvojice_bodu(x1, y1, x2, y2:extended; var xs, ys:extended);
procedure druhy_bod_kolmice (x1, y1, x2, y2, x3, y3:extended;var xs,
ys:extended);
function vzdal_bodu(x1,y1,x2,y2:extended):extended;
implementation
function vzdal_bodu(x1,y1,x2,y2:extended):extended;
begin
Result:=sqrt((x1-x2)*(x1-x2)+(y1-y2)*(y1-y2));
end;
procedure reseni_rovnice(a11,a12,a13,a21,a22,a23:extended; var x,
y:extended; var chyba:integer);
const malo = 0.001;
var d, dx, dy:extended;
begin
d:=a11*a22-a12*a21;
dx:=a13*a22-a12*a23;
dy:=a11*a23-a13*a21;
if (abs(d)<malo) and (abs(dx)<malo) then
begin
chyba:=2; //nekonecne mnoho reseni
exit;
end;
if (abs(d)<malo) and (abs(dx)>=malo) then
begin
chyba:=1; //bez reseni
exit;
end;
if (abs(d)>malo) then
begin
chyba:=0; //existuje reseni
x:=dx/d;
y:=dy/d;
end;
end;
procedure stred_dvojice_bodu(x1, y1, x2, y2:extended; var xs, ys:extended);
begin
xs:=(x1 + x2)/2;
ys:=(y1 + y2)/2;
end;
procedure druhy_bod_kolmice (x1, y1, x2, y2, x3, y3:extended;var xs,
ys:extended);
var
u,v, pom:extended;
begin
u:=x1 - x2;
v:=y1 - y2;
pom:=u;
u:=v;
v:=-pom;
xs:=x3 + u;
ys:=y3 + v;
end;
procedure prunik_primek(x1, y1, x2, y2, x3, y3, x4, y4:extended; var
x,y:extended; var na_prvni, na_druhe:boolean; var chyba:integer);
//na_prvni, na_druhe: true znamena, ze prusecik lezi na prvni resp. druhe
usecce
//to ma vyznam pri pruniku usecek.
var r,t:extended;
begin
//[x1, y1] a [x2, y2] jsou body na prvni primce
//[x3, y3] a [x4, y4] jsou body na druhe primce
reseni_rovnice(x2 - x1, -x4 + x3, x3 - x1, y2 - y1, -y4 + y3, y3 - y1, t,
r, chyba);
if chyba <> 0 then exit;
na_prvni := (t>=0) and (t<=1);
na_druhe := (r>=0) and (r<=1);
x:= x1 + (x2 - x1)*t;
y:= y1 + (y2 - y1)*t;
end;
end.
> Nema nekdo napsany kus kodu pro vypocet parametru oblouku ze tri zadanych
> bodu v rovine v kartezkych souradnicich.
> Potrebuji zjistit Radius[r] a Stred[x, y].
> Radius jsem vypocital, ale pri pocitani stredoveho bodu obcas dochazi k
> chybe. Zrejmne nemam nejstatnejsi reseni vypoctu rovnic kruznice.
>